#pragma once

#include "IObject.h"


struct IServiceLocator;

struct __declspec(novtable) __declspec(uuid("{EF548683-8BC0-4054-B77D-774F9A26AEAC}")) IService
	: public IObject
{
	virtual void Initialize(IServiceLocator& ar_ServiceLocator) = 0;
	virtual void Deinitialize() = 0;

	virtual bool get_IsInitialized() const = 0;
};


struct __declspec(novtable) __declspec(uuid("{655B0B32-7B02-495b-9172-C8C243FB7602}")) IServiceLocator
	: public IObject
{
	virtual void AddService(IService* ar_ServiceObject_) = 0;
	virtual void RemoveService(IService* ar_ServiceObject_) = 0;

	virtual void InitializeServices() = 0;
	virtual void DeinitializeServices() = 0;
};
